#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
每日批量爬取脚本
用于定时任务，一次性爬取所有港口组合数据
确保所有数据共享同一个版本号，保证数据一致性
"""

import subprocess
import sys
import time
from datetime import datetime
import os

def run_batch_crawl():
    """执行批量爬取"""
    
    print("🚢 开始每日批量爬取所有港口组合数据")
    print(f"⏰ 开始时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print("="*60)
    
    try:
        # 切换到正确的目录
        script_dir = os.path.dirname(os.path.abspath(__file__))
        os.chdir(script_dir)
        
        # 执行批量爬取命令
        cmd = [
            sys.executable,  # 使用当前Python解释器
            'process_routes.py',
            '--use_port_config'  # 批量模式，处理所有港口组合
        ]
        
        print("📋 执行命令:", ' '.join(cmd))
        print("-" * 60)
        
        # 记录开始时间
        start_time = time.time()
        
        # 执行命令
        result = subprocess.run(
            cmd,
            capture_output=False,  # 实时显示输出
            text=True,
            timeout=3600  # 1小时超时
        )
        
        # 计算耗时
        end_time = time.time()
        duration = end_time - start_time
        
        print("="*60)
        print(f"⏱️  总耗时: {duration:.2f}秒 ({duration/60:.1f}分钟)")
        
        if result.returncode == 0:
            print("✅ 批量爬取完成成功！")
            print("📊 所有港口组合数据已更新到最新版本")
            print("🎯 客户现在可以看到一致的最新船期数据")
        else:
            print(f"❌ 批量爬取失败，返回码: {result.returncode}")
            return False
            
    except subprocess.TimeoutExpired:
        print("⏰ 爬取超时（超过1小时）")
        return False
    except Exception as e:
        print(f"💥 爬取异常: {e}")
        return False
    
    print(f"🏁 结束时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    return True

def main():
    """主函数"""
    print("🔄 每日船期数据爬取任务")
    print("📅 建议在每天凌晨执行此脚本")
    print()
    
    success = run_batch_crawl()
    
    if success:
        print("\n🎉 任务完成！可以将此脚本加入crontab定时执行")
        print("📝 crontab示例: 0 6 * * * /path/to/python /path/to/daily_crawl.py")
        sys.exit(0)
    else:
        print("\n💡 请检查错误信息并重试")
        sys.exit(1)

if __name__ == "__main__":
    main()